/*
 * Copyright 2007 National Bioinformatics Network
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package dgbgui.gui.event;

import java.util.LinkedHashSet;

import dgbgui.gui.widgets.Widget;
import dgbgui.gui.widgets.visual.modeldriven.ModelDrivenConceptWidget;
import dgbgui.modeldocument.ModelDrivenWorkspace;
import dgbgui.modeldocument.primitives.Concept;
import dgbgui.tools.ModelDrivenFindTool;
import edu.umd.cs.piccolo.event.PBasicInputEventHandler;
import edu.umd.cs.piccolo.event.PInputEvent;



public class ModelDrivenDoubleClickEventHandler extends PBasicInputEventHandler implements
        CheckConsumedInputEventHandler {

    public boolean eventProcessed(PInputEvent event, int type) {
        m_processed = false;
        processEvent(event, type);
        return m_processed;
    }
    
    public void mousePressed(PInputEvent event) {
        if ( event.getClickCount() == 2 ) {
            m_processed = true;
            
            // If the item that was double-clicked is a filter definition
            // widget, launch the edit properties tool, but first set the 
            // selection to the query that owns the definition
            
            LinkedHashSet<Class> objectPreference = new LinkedHashSet<Class>();
            objectPreference.add(ModelDrivenConceptWidget.class);
            
            Widget preferredObj = Widget.findPreferencialObject(
                    (event.getCamera().pick(
                            event.getCanvasPosition().getX(),
                            event.getCanvasPosition().getY(),
                            1)).getNodeStackReference(),
                            objectPreference);

            if ( preferredObj != null ) { 
                Concept conceptInModel = ((ModelDrivenConceptWidget)preferredObj).getConcept();
                // Only allowed on non-target concepts
                if ( conceptInModel != ModelDrivenWorkspace.getInstance().getTarget() ) {
                    new ModelDrivenFindTool(conceptInModel).execute();
                }
                m_processed = true;
            }
        }
    }
    


    private boolean m_processed;
}
